﻿using D.Application.Contracts.IService;
using Microsoft.AspNetCore.Mvc;
using D.Application.Contracts.Dtos;
using D.WebApi.Core.Dtos;

namespace D.Host.Controllers
{
    /// <summary>
    /// 组织部门
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class SysOrgController : ControllerBase
    {
        private readonly ISysOrgService _sysOrgService;

        /// <summary>
        /// 注入
        /// </summary>
        /// <param name="sysOrgService"></param>
        public SysOrgController(ISysOrgService sysOrgService)
        {
            _sysOrgService = sysOrgService;
        }

        /// <summary>
        /// 获取分页数据
        /// </summary>
        /// <param name="pageQueryDto"></param>
        /// <returns></returns>
        [HttpPost("page")]
        public async Task<ApiPageResult<SysOrgDto>> QueryPageAsync([FromBody] PageQueryDto pageQueryDto)
        {
            return await _sysOrgService.QueryPageAsync(pageQueryDto);
        }

        /// <summary>
        /// 获取单笔数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet("get/{id}")]
        public async Task<ApiResult> GetById(Guid id)
        {
            return await _sysOrgService.GetByIdAsync(id);
        }

        /// <summary>
        /// 获取列表数据
        /// </summary>
        /// <returns></returns>
        [HttpGet("list")]
        public async Task<ApiListResult<SysOrgDto>> QueryListAsync()
        {
            return await _sysOrgService.QueryListAsync();
        }

        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="sysOrgDto"></param>
        /// <returns></returns>
        [HttpPost("add")]
        public async Task<ApiResult> Add([FromBody] SysOrgDto sysOrgDto)
        {
            return ApiResult.Success();
        }

        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="sysOrgDto"></param>
        /// <returns></returns>
        [HttpPut("update")]
        public async Task<ApiResult> Update([FromBody] SysOrgDto sysOrgDto)
        {
            return ApiResult.Success();
        }

        /// <summary>
        /// 数据状态
        /// </summary>
        /// <param name="statusDto"></param>
        [HttpPost("status")]
        public async Task<ApiResult> Status([FromBody] StatusDto statusDto)
        {
            return ApiResult.Success();
        }

        /// <summary>
        /// 审计状态
        /// </summary>
        /// <param name="auditDto"></param>
        [HttpPost("audit")]
        public async Task<ApiResult> Audit([FromBody] AuditDto auditDto)
        {
            return ApiResult.Success();
        }

        /// <summary>
        /// 单个删除
        /// </summary>
        /// <param name="id"></param>
        [HttpDelete("delete/{id}")]
        public async Task<ApiResult> Delete(int id)
        {
            return ApiResult.Success();
        }

        /// <summary>
        /// 批量删除
        /// </summary>
        /// <param name="ids"></param>
        [HttpPost("delete")]
        public async Task<ApiResult> BatchDelete([FromBody] List<string> ids)
        {
            return ApiResult.Success();
        }
    }
}


//1.公司：通常是一个组织的最高层次，代表整个组织。
//2.部门：通常是一个公司下的一个分支机构，代表一个具体的业务部门。
//3.小组：通常是一个部门下的一个工作小组，代表一个具体的工作任务。
//4.个人：通常是一个小组或部门下的一个员工，代表一个具体的工作人员。

//假设有一个公司叫做ABC公司，它的组织部门结构如下：

//1.公司：ABC公司
//2.部门：
//   -技术部
//   - 财务部
//   - 人力资源部
//3.小组：
//   -技术部：
//     -前端小组
//     - 后端小组
//   - 财务部：
//     -会计小组
//     - 税务小组
//   - 人力资源部：
//     -招聘小组
//     - 培训小组
//4.个人：
//   -前端小组：
//     -张三
//     - 李四
//   - 后端小组：
//     -王五
//     - 赵六
//   - 会计小组：
//     -小红
//     - 小明
//   - 税务小组：
//     -小丽
//     - 小芳
//   - 招聘小组：
//     -小张
//     - 小王
//   - 培训小组：
//     -小李
//     - 小赵

//在这个例子中，ABC公司是最高层次的组织，下面有三个部门：技术部、财务部和人力资源部。每个部门下面有两个小组，每个小组下面有两个员工。